package com.dsbj.it.DingTalkBotStarter.common.converter;

import com.dsbj.it.DingTalkBotStarter.common.enums.FieldTypeEnum;

import java.util.HashMap;
import java.util.Map;
import java.util.ServiceLoader;

/**
 * 转换器工厂类，管理所有类型转换器
 */
public class ConverterFactory {

    private static final Map<FieldTypeEnum, TypeConverter> converters = new HashMap<>();

    static {
        // 初始化默认转换器
        registerConverter(new IntegerConverter());
        registerConverter(new DoubleConverter());
        registerConverter(new StringConverter());

        // 通过SPI机制加载自定义转换器
        ServiceLoader<TypeConverter> loader = ServiceLoader.load(TypeConverter.class);
        for (TypeConverter converter : loader) {
            registerConverter(converter);
        }
    }

    /**
     * 注册转换器
     */
    public static void registerConverter(TypeConverter converter) {
        converters.put(converter.getSupportedType(), converter);
    }

    /**
     * 获取指定类型的转换器
     */
    public static TypeConverter getConverter(FieldTypeEnum dataType) {
        TypeConverter converter = converters.get(dataType);
        if (converter == null) {
            throw new IllegalArgumentException("不支持的数据类型: " + dataType);
        }
        return converter;
    }
}

